DMS执行数据变更任务时发生“No operations allowed after connection closed”报错

更新时间:

问题描述

在DMS控制台执行数据变更任务时,出现以下错误:

No operations allowed after connection closed

或出现以下错误:

Communications link failure during commit(). Transaction resolution unknown

问题原因

该错误是由于会话连接被关闭引起,主要有如下几种问题场景:

  • 实例宕机
  • 会话连接被人为结束(会话被kill)
  • 会话连接超时,连接自动断开

解决方案

根据不同的问题场景,解决方法也不一致:

  • 实例宕机:
    • 若您是RDS实例:
      • 此问题一般在10分钟内会自动修复,请您在10分钟后重新执行任务即可。
      • 确认是否有运维操作导致主备实例发生变更,如果有发生变更,请参见自动或手动主备切换进行恢复。
      • 如果超时10分钟问题没有修复,请获取工单号和对应的数据库信息提供给对应的DBA,如何查看DBA请参见如何在DMS控制台中查看数据库对应的DBA
    • 若您是自建数据库实例:
      说明:本文以MySQL数据库为例进行介绍。
      1. 登录自建数据库实例所在机器,执行以下命令,查看MySQL进程。
        ps -ef |grep mysql
      2. 如果不存在MySQL进程,您可以查看MySQL日志定位实例宕机的具体问题,MySQL日志一般/var/log目录下。
      3. 若问题未解决,请获取工单号和对应的数据库信息提供给对应的DBA,如何查看DBA请参见如何在DMS控制台中查看数据库对应的DBA
  • 会话连接被人为结束:
    您可以通过操作审计功能确认是否是人为的结束会话连接,如果是,重新执行任务即可。操作审计功能请参见操作审计
  • 连接超时,数据库自动断开连接:
    常见的连接超时参数有wait_timeout,您可以确认是否是该值设置过小,导致会话连接超时。如果是wait_timeout值过小导致,可以适当增加该值,然后重新执行任务即可:
    • 若您是RDS实例,可以在RDS控制台的参数设置中查看并修改wait_timeout值。
    • 若您是自建数据库实例:
      1. 执行以下SQL语句,查看wait_timeout值。
        show variables like 'wait_timeout';
      2. 执行以下SQL语句,按照实际情况修改wait_timeout值。
        set global wait_timeout=XXX;

更多信息

在重试任务时,如果发生“Duplicate column name”报错,请参见DMS控制台中执行数据变更任务时提示“Duplicate column name 'XXXXX'”进行处理。

适用于

  • 数据管理DMS